package br.com.translog.dao;

import br.com.translog.interfacee.IDAOFornecedor;
import br.com.translog.modelo.Cliente;
import br.com.translog.modelo.Fornecedor;
import br.com.translog.modelo.Logradouro;
import br.com.translog.modelo.PessoaJuridica;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class DAOFornecedor implements IDAOFornecedor {
    
    //Gerando o EntityManagerFactory e o EntityManager que irao gerenciar a persistencia do objeto...
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("TranslogPU");
    EntityManager em = emf.createEntityManager();

    @Override
    public void cadastraFornecedor(Fornecedor fornecedor, PessoaJuridica pessoaJuridica, Logradouro logradouro, Cliente cliente) {
                
        try {
            //Abrindo uma conexao para realizacao da transacao...
            em.getTransaction().begin();
            //Persistindo os objetos...
            em.persist(pessoaJuridica);
            em.persist(logradouro);
            em.persist(fornecedor);
            em.persist(cliente);
            //Comitando a transacao...
            em.getTransaction().commit();
                 
        } catch (Exception e) {     
        } finally {
        }
    }

    @Override
    public void alteraFornecedor(Fornecedor fornecedor, PessoaJuridica pessoaJuridica, Logradouro logradouro, Cliente cliente) {
                
        try {
            //Abrindo uma conexao para realizacao da transacao...
            em.getTransaction().begin();
            //Atualizando os objetos...
            em.merge(pessoaJuridica);
            em.merge(logradouro);
            em.merge(fornecedor);
            em.merge(cliente);
            //Comitando a transacao...
            em.getTransaction().commit();
            
        } catch (Exception e) {
        } finally {
        }
    }

    @Override
    public void excluiFornecedor(Fornecedor fornecedor, PessoaJuridica pessoaJuridica, Logradouro logradouro, Cliente cliente) {
        
        try {
            //Abrindo uma conexao para realizacao da transacao...
            em.getTransaction().begin();
            //Removendo os objetos...
            em.remove(pessoaJuridica);
            em.remove(logradouro);
            em.remove(fornecedor);
            em.remove(cliente);
            //Comitando a transacao...
            em.getTransaction().commit();
            
        } catch (Exception e) {
        } finally {
        }
    }

    @Override
    public Fornecedor consultaFornecedor(int codigo) {
        
        Fornecedor fornecedor = null;
        
        try {
            //Realizando a consulta...
            fornecedor = (Fornecedor) em.createNamedQuery("Fornecedor.findByCodigo")
                    .setParameter("codigo", codigo)
                    .getSingleResult();
            
        } catch (Exception e) {
        } finally {
        }
        
        return fornecedor;
    }
}
